package com.bestcem.xm.label.dao;

import com.bestcem.xm.label.entity.pojo.LabelGroupDO;
import com.bestcem.xm.label.grpc.service.param.label.ListLabelsParam;
import com.bestcem.xm.label.service.dto.label.LabelInfoDTO;

import java.util.Collection;
import java.util.List;

/**
 * 提供标签组数据访问服务
 *
 * @author dc.wang <dc.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/5/18
 */
public interface LabelGroupDao {

    /**
     * 校验存在同名的标签组，在相同企业中
     *
     * @param orgId          企业唯一标识
     * @param labelGroupName 标签组名
     * @return true: exist; false: no exist
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    boolean containsDuplicate(String orgId, String labelGroupName);


    /**
     * 查询企业当前标签组数量
     *
     * @param labelGroupEntity 参数，存在的参数作为校验条件
     * @return count
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    Integer count(LabelGroupDO labelGroupEntity);

    /**
     * 通过企业ID查询标签组
     *
     * @param orgId 企业唯一标识
     * @return 如果不存在，return null
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    List<LabelGroupDO> list(String orgId);


    /**
     * 插入新的标签组信息
     *
     * @param labelGroupEntity 新标签组信息
     * @return 插入的标签组
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    LabelGroupDO insert(LabelGroupDO labelGroupEntity);

    /**
     * 更新标签组名
     *
     * @param labelGroupDO 待更新标签组信息 @NotNull
     * @return 更新后标签组信息
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    LabelGroupDO updateNameById(LabelGroupDO labelGroupDO);


    /**
     * 通过ID删除标签组
     *
     * @param id 唯一标识
     * @return 删除的标签组
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    LabelGroupDO delete(String id);

    /**
     * 根据ID获取标签组信息
     * 已弃用：数据源迁移至mysql
     *
     * @param id 标签组id
     * @return LabelGroupDO
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    LabelGroupDO getById(String id);


    /**
     * 获取所有标签组下所有的标签信息
     *
     * @param param ListLabelsParam
     * @return List<LabelInfoDTO>
     */
    List<LabelInfoDTO> listByParam(ListLabelsParam param);

    /**
     * 根据组织id和标签组名称查询标签组信息
     *
     * @param orgId 组织id
     * @param name  标签组名
     * @return com.bestcem.xm.member.label.entity.mongo.LabelGroup
     * @author zh.zhang <zh.zhang@idiaoyan.com>
     * @date 2021-09-17
     */
    LabelGroupDO find(String orgId, String name);

    /**
     * 根据 orgId 获取所有的标签组
     *
     * @param orgSrcId
     * @return
     */
    List<LabelGroupDO> listByOrgId(String orgSrcId);

    /**
     * 批量创建行业sample数据
     *
     * @param labelGroups
     */
    void batchSaveSampleData(List<LabelGroupDO> labelGroups);

    /**
     * 批量创建
     *
     * @param values
     * @return
     */
    Collection<LabelGroupDO> batchSave(Collection<LabelGroupDO> values);
}
